﻿#region 참조 네임스페이스

using System;

#endregion

namespace Skying
{
	/// <summary>
	/// 타입의 배열에 대한 확장 메서드를 제공한다.
	/// </summary>
	public static class ArrayExtensions
	{
		/// <summary>
		/// 타입의 배열을 주어진 길이만큼 잘라낸다.
		/// </summary>
		/// <typeparam name="T">대상 배열에 대한 타입을 나타낸다.</typeparam>
		/// <param name="source">대상 타입의 배열을 설정한다.</param>
		/// <param name="length">배열을 잘라낼 길이를 설정한다.</param>
		/// <returns>타입의 배열에 대해 주어진 길이만큼 잘라낸 동일한 타입의 배열이 반환된다.</returns>
		public static T[] Subset<T>(this T[] source, int length)
		{
			return Subset<T>(source, 0, length);
		}

		/// <summary>
		/// 타입의 배열을 특정 위치부터 주어진 길이만큼 잘라낸다.
		/// </summary>
		/// <typeparam name="T">대상 배열에 대한 타입을 나타낸다.</typeparam>
		/// <param name="source">대상 타입의 배열을 설정한다.</param>
		/// <param name="start">배열을 잘라낼 위치를 설정한다.</param>
		/// <param name="length">배열을 잘라낼 길이를 설정한다.</param>
		/// <returns>타입의 배열에 대해 특정 위치부터 주어진 길이만큼 잘라낸 동일한 타입의 배열이 반환된다.</returns>
		public static T[] Subset<T>(this T[] source, int start, int length)
		{
			T[] destination = new T[length];

			Array.Copy(source, start, destination, 0, length);

			return destination;
		}
	}
}